{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Improving Linear Regression with Neural Networks (Logistic Regression)\n",
    "\n",
    "This function shows how to use TensorFlow to solve logistic regression with a multiple layer neural network\n",
    "\n",
    "$$\n",
    "\\textbf{y} = sigmoid(\\textbf{A}_{3} \\times sigmoid(\\textbf{A}_{2} \\times sigmoid(\\textbf{A}_{1} \\times \\textbf{x} + \\textbf{b}_{1}) + \\textbf{b}_{2}) + \\textbf{b}_{3})\n",
    "$$\n",
    "\n",
    "We will use the low birth weight data, specifically:\n",
    "```\n",
    "  y = 0 or 1 = low birth weight\n",
    "  x = demographic and medical history data\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "import requests\n",
    "import os.path\n",
    "import csv\n",
    "from tensorflow.python.framework import ops\n",
    "\n",
    "# reset computational graph\n",
    "ops.reset_default_graph()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Obtain and prepare data for modeling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# name of data file\n",
    "birth_weight_file = 'birth_weight.csv'\n",
    "\n",
    "# download data and create data file if file does not exist in current directory\n",
    "if not os.path.exists(birth_weight_file):\n",
    "    birthdata_url = 'https://github.com/nfmcclure/tensorflow_cookbook/raw/master/01_Introduction/07_Working_with_Data_Sources/birthweight_data/birthweight.dat'\n",
    "    birth_file = requests.get(birthdata_url)\n",
    "    birth_data = birth_file.text.split('\\r\\n')\n",
    "    birth_header = birth_data[0].split('\\t')\n",
    "    birth_data = [[float(x) for x in y.split('\\t') if len(x)>=1] for y in birth_data[1:] if len(y)>=1]\n",
    "    with open(birth_weight_file, \"w\") as f:\n",
    "        writer = csv.writer(f)\n",
    "        writer.writerows(birth_data)\n",
    "        f.close()\n",
    "\n",
    "# read birth weight data into memory\n",
    "birth_data = []\n",
    "with open(birth_weight_file, newline='') as csvfile:\n",
    "     csv_reader = csv.reader(csvfile)\n",
    "     birth_header = next(csv_reader)\n",
    "     for row in csv_reader:\n",
    "         birth_data.append(row)\n",
    "\n",
    "birth_data = [[float(x) for x in row] for row in birth_data]\n",
    "\n",
    "# Pull out target variable\n",
    "y_vals = np.array([x[0] for x in birth_data])\n",
    "# Pull out predictor variables (not id, not target, and not birthweight)\n",
    "x_vals = np.array([x[1:8] for x in birth_data])\n",
    "\n",
    "# set for reproducible results\n",
    "seed = 99\n",
    "np.random.seed(seed)\n",
    "tf.set_random_seed(seed)\n",
    "\n",
    "# Declare batch size\n",
    "batch_size = 90\n",
    "\n",
    "# Split data into train/test = 80%/20%\n",
    "train_indices = np.random.choice(len(x_vals), round(len(x_vals)*0.8), replace=False)\n",
    "test_indices = np.array(list(set(range(len(x_vals))) - set(train_indices)))\n",
    "x_vals_train = x_vals[train_indices]\n",
    "x_vals_test = x_vals[test_indices]\n",
    "y_vals_train = y_vals[train_indices]\n",
    "y_vals_test = y_vals[test_indices]\n",
    "\n",
    "# Normalize by column (min-max norm)\n",
    "def normalize_cols(m):\n",
    "    col_max = m.max(axis=0)\n",
    "    col_min = m.min(axis=0)\n",
    "    return (m-col_min) / (col_max - col_min)\n",
    "    \n",
    "x_vals_train = np.nan_to_num(normalize_cols(x_vals_train))\n",
    "x_vals_test = np.nan_to_num(normalize_cols(x_vals_test))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Define Tensorflow computational graph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Create graph\n",
    "sess = tf.Session()\n",
    "\n",
    "# Initialize placeholders\n",
    "x_data = tf.placeholder(shape=[None, 7], dtype=tf.float32)\n",
    "y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)\n",
    "\n",
    "\n",
    "# Create variable definition\n",
    "def init_variable(shape):\n",
    "    return(tf.Variable(tf.random_normal(shape=shape)))\n",
    "\n",
    "\n",
    "# Create a logistic layer definition\n",
    "def logistic(input_layer, multiplication_weight, bias_weight, activation = True):\n",
    "    linear_layer = tf.add(tf.matmul(input_layer, multiplication_weight), bias_weight)\n",
    "    # We separate the activation at the end because the loss function will\n",
    "    # implement the last sigmoid necessary\n",
    "    if activation:\n",
    "        return(tf.nn.sigmoid(linear_layer))\n",
    "    else:\n",
    "        return(linear_layer)\n",
    "\n",
    "\n",
    "# First logistic layer (7 inputs to 14 hidden nodes)\n",
    "A1 = init_variable(shape=[7,14])\n",
    "b1 = init_variable(shape=[14])\n",
    "logistic_layer1 = logistic(x_data, A1, b1)\n",
    "\n",
    "# Second logistic layer (14 hidden inputs to 5 hidden nodes)\n",
    "A2 = init_variable(shape=[14,5])\n",
    "b2 = init_variable(shape=[5])\n",
    "logistic_layer2 = logistic(logistic_layer1, A2, b2)\n",
    "\n",
    "# Final output layer (5 hidden nodes to 1 output)\n",
    "A3 = init_variable(shape=[5,1])\n",
    "b3 = init_variable(shape=[1])\n",
    "final_output = logistic(logistic_layer2, A3, b3, activation=False)\n",
    "\n",
    "# Declare loss function (Cross Entropy loss)\n",
    "loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=final_output, labels=y_target))\n",
    "\n",
    "# Declare optimizer\n",
    "my_opt = tf.train.AdamOptimizer(learning_rate = 0.002)\n",
    "train_step = my_opt.minimize(loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loss = 0.68008155\n",
      "Loss = 0.5498135\n",
      "Loss = 0.5425708\n",
      "Loss = 0.5542091\n",
      "Loss = 0.5251392\n",
      "Loss = 0.5386876\n",
      "Loss = 0.5331423\n",
      "Loss = 0.48619473\n",
      "Loss = 0.58909637\n",
      "Loss = 0.5264541\n"
     ]
    }
   ],
   "source": [
    "# Initialize variables\n",
    "init = tf.global_variables_initializer()\n",
    "sess.run(init)\n",
    "\n",
    "# Actual Prediction\n",
    "prediction = tf.round(tf.nn.sigmoid(final_output))\n",
    "predictions_correct = tf.cast(tf.equal(prediction, y_target), tf.float32)\n",
    "accuracy = tf.reduce_mean(predictions_correct)\n",
    "\n",
    "# Training loop\n",
    "loss_vec = []\n",
    "train_acc = []\n",
    "test_acc = []\n",
    "for i in range(1500):\n",
    "    rand_index = np.random.choice(len(x_vals_train), size=batch_size)\n",
    "    rand_x = x_vals_train[rand_index]\n",
    "    rand_y = np.transpose([y_vals_train[rand_index]])\n",
    "    sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "\n",
    "    temp_loss = sess.run(loss, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "    loss_vec.append(temp_loss)\n",
    "    temp_acc_train = sess.run(accuracy, feed_dict={x_data: x_vals_train, y_target: np.transpose([y_vals_train])})\n",
    "    train_acc.append(temp_acc_train)\n",
    "    temp_acc_test = sess.run(accuracy, feed_dict={x_data: x_vals_test, y_target: np.transpose([y_vals_test])})\n",
    "    test_acc.append(temp_acc_test)\n",
    "    if (i+1)%150==0:\n",
    "        print('Loss = ' + str(temp_loss))\n",
    "        "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Display model performance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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/vnnn/60qVOn6oYNG7Rp06Yx29txxx0V0Lvvvltvu+02VVUtKSnR66+/XufNm6fDhw/XkpKSyPb91KlTFdBOnTqpqmqTJk0U0GXLllX4NlNp3759zD6sKirjZyprzIC2bds2gohyCyjUEMfYnB/kS/vK16Qwe/bs0EnhsMMOSzntpZdeihletWpVQlKoW7du0mX32WefmOE77rhDVVU/+ugjf9yMGTP8mL1x48aNSxgXfL9lyxZds2ZNzLr79u2bkBTiX6qqn376acy45557rsL3vbfuadOmxSSFxo0bJyTCilZSUqIDBgzQOXPmqGp0SeGPP/6o0PWVVnVLCpXts4YRNimE6fvIhLDHHnswadIkzj777IzzfvjhhymnxRf57L777gnztGzZMumy3377bcywVwwU7KvJq9cIOv300wGYM2eOP27nnXf230+dOpVNmzbFLBP2slzjip2CrbAAfvjhB0QkpkisonjbjrJV0uzZs3nggQc47bTTItvG+PHj2WabbZgxY0Zk24jC7Nmz+eOPP5JOmz9/ftI+w55++mkWLap8HSasWbOGe++9t0r0g2ZJoQIde+yxvPDCC+XqOXXBggUxw7/99lvCPM2aNSvz+idMmJB0/MqVK/0msQA///yz/37z5s0JSSHsgTZ+vvjh9993qqlefPHFUOtLx0sC8X+jFNwv11xzDXPnzq3wbXjNnr/66qsKX3fQ3XffzQcffMC4ceNS7rs333wz1Lr++OMP9tprr6QnST/++CO77LKLf6OfZ9WqVfTp04djjjmm9MFHbMWKFZx88smsWLEi6fRrrrmGq6++2u+1oDKzpBCBZGf3YWW6D6BFixb+/QthtGjRImHcq6++6t8o50nXYkhEEpLCV199lfIHEhRfaR6fFLwzq/j5Vq1axU033VSqx6B6FcrxSSHKszcvvoKCAr+ivaKl2kcV7dprr+WII46gZ8+eMU8VDCa6E044IdS6vP+X9957L2Gad8IRf8XsfV+LFy8uVdxRW79+Pf369WPChAk8/PDDSefxGo+sXp2sZ6DSKSkp4ZlnnsnZc+EtKUQgVVPTirBs2TL/hrWw88c79dRT2WOPPWLGrVy5Mu164pNCWKmSwl133cXgwYP9hxTFJ4uBAwdy5513Mnbs2NDbiv8RJUsKq1atSijCKg8vKXz9dfhnT61Zs4YLLriAd955J9T82UoKQb///rv//sQTTyz18t73mSwhe99Lqv+NTAfDd999N2P/YWEVFxdz6KGHsnDhwpTznH322f72Up1geM3IK+LG0ZEjR9K7d28effTRcq+rLCL9LxOR7iIyR0TmisjAFPP0FJHvRORbESl/GUIeiPrO2ijWn+4JcitXrow5SIRVUlLCjz/+mDB+2bJlXH/99QwaNIgbbrgBgBEjRtC4cWP/KsirW4lPRitWrPDPys4///yYfRF/VeH9gLds2cJzzz3HhRdeSOPGjf06mUWLFiEiPP/88xk/y+jRoxGRhD6N0l3JpDpAnHTSSYyXC5FKAAAgAElEQVQePTp0MUkukoK3zYULF7J06dJSLx+8Wlu8eDFffvllwrrj/4+9ZTIlhaOPPjqmDueee+7x79cpjcWLF/Pss8/yySefcNdddzFjxoyEejmIve8nVVLwTgTLkxS2bNmCqlJUVARQpt9cRYjsv0xEagKPAMcCewNnicjecfPsBlwPHKyq++DcRV0ltGvXjltvvTWSx3VW5Jmux+tnKZn/+7//45BDDin1OocNG8a5554bM+6iiy5KeRBetWoVt99+O4cffrj/w4jXrFkz9tprLwCeffbZmGnBA3RhYaGfWNavX895553n3znuJR6v7idMfYbXK+7s2bNjytvTJQXv7DGe1yUJxNZ7rF27NmnFbJiksHbt2pgryLfeeoszzjgj5fzx4osPvbjatm2b8SoymWBC3nXXXencuXPCulMlhdIU9y1btoxrrrmGgw46qFTxbdiwgdatW8fc9PjXv/6VfffdN+Ny8ScqmzZtYuTIkUDpk4LX4gecXgmOO+64Ui0fhShPPToDc1V1nqpuBF4CesTNcyHwiKoWA6hqblJjBObNm8egQYNo2LBhpbiR6dRTT007vSxnQJ9++mnS8em64RgyZAgffvghb731FpC8snjRokVst912CeO9Ipzp06f7Pc1C6tiD9QHFxcVJtzV37lz69+/vTzvyyCNp02br02lLU6z24IMP8vnnn8ccDIMJqUGDBrRt2zZhuVTFLUEHHXRQTFzHHXccY8eODV0u3bRp05jhspZnb9q0KeZAt2XLloQTjlRJwUsG3ranTJnCLrvs4l8ZJuPNW1RUxKRJk0LHme4kKJ27776bv/3tbzHj3n33Xf/9xo0bKS4uTnmW790Ut2LFCv7zn/9Qo0YNzj//fH/6//t//89/n6u+vKJMCjsCwcLvRe64oN2B3UVkiohMFZHuyVYkIv1EpFBEClOdQeazCy+8MO/vkIyi//+KqCgbPHgwIsKQIUNiullI9qO77rrr/PfBH32yA/fixYu54IILAKdTwaZNmzJ06NCE+U455RQefvjhmOa6wSaTYSrbPQMGDKBr164xP/b4oplknyvVlcKECRO47bbbUNWEHnS9bZT1ew1ztr5gwQK/ZdT69etZtGgRtWvXZujQof7ywUR75ZVXxox7++23/dZnwW16/zcDBw5k/vz59O/fn8MPPzxpDMH1H3/88f7nDY4fPHgwAwfGll6X538zvogpeHa/adMmmjVrlvSk5csvv6R58+aMGTOGf/3rX37RafyzWTzZaD2XcsNRvIDTgCcCw+cCD8fNMxF4DagFtMNJIo3TrTdfb14Lo1atWv6NMf/+97/T3vh16KGHhr4ZLl9fhx9+eM623bNnT//9V199FWqZLl26JHxnrVu3VkB33nnnmHk9d9xxR9p1rl27VlVVzz33XH9c8ObDYcOG+euKX/fy5csV0Jo1ayqg48ePj4nNm3/EiBEJy3rbWLJkiT/uk08+0W7duummTZsSPmd83Pfee2/S8cFtNGjQwB9u3ry5P3333XfX33//PSb24LITJ070hzt37uyv79dff/XHb9y40b/5MH67wXl22GGHmHl23XVXnTRpkr7zzjsJcW/YsEHvu+8+3bRpU8y2AL3kkktSfs5GjRolTCsuLlZV1aKiopjxQ4YMSVjeM3LkSAXnxs9u3bolbCvZvt6yZUvCesqKPLh5bTGwU2C4tTsuaBHwuqpuUtX5wA/AbhHGlFNnnXWW/z7dpWHjxo1Tnj1UJtnumC8oeMYdtoM+70x1w4YNiAhDhw5NWeENTt1Asn6igrxiueD3GfzulyxZktA82OPds5LpuRXxdSsAtWvXBogpejnrrLOYPHlyqAcAjR8/nm7duiWdNmDAAETEr9t68803E1q5JbtSiJ8Gzmdbu3YtxcXFfq/BAJdeemlCXUZxcTFjxozxh4cNG5bwWX766SeOO+64pN/XXXfdxZVXXslTTz2VUBeULM50vGaz8fcRpSoyDW6jNMVC6VpFRSZM5ijLCygA5uFcAdQGvgH2iZunO/CM+745zpVCs3TrrcxXCsGzk/79+6c8u9xvv/10yZIl/vADDzxQqrPk+K4yqtor/uwz2atly5alXm+7du10/vz5Onz4cAV0u+220xYtWigQcyZMmjO7+FeNGjVCzxtct6rqAQccEDP+lVde8aetW7fOH3/wwQcnLOtd4YwdO9Yft9NOOymgCxYs0C+++EJ79+7t90VVkd/PHnvs4f//ikjMtFmzZul///tffzhVly3NmjUrVwxvv/12wrgBAwb474899tiYaRdffHHC/CNGjFDV5FcK06dPV1XVGTNmZPwePY899pgC2q9fPz3mmGNC/T95cQ0ZMqTc/YaR6ysFVd0MXApMBr4HxqrqtyJym4h4DZ8nA8tF5DvgA+AaVc3vwvdyCN6/kO5soU6dOhQUFPjDu+229eKpVatWGbdz5JFHJowrzb0N+S5M08yyNOebP38+7dq1o3///v64VE0Nw5ZJFxQUpOzqIZP4O5iD2+zdu7f/vmbNmgnLes/vDtZ5BP/nOnfuzNNPP81HH30UU19SUVJdKcRX6Ke6EbO89/oE78j3BK9cvYYM6cQ/bjfIu4IsTd1E/L4Iw7t6uuGGG7j33ntLvXxZFGSepexUdRIwKW7cLYH3Clzpvqo878dbr169tAe2goICGjfe+jTU4LwNGzbk11/TP84i2bpbt25d2nDzVrba64uIXwwTXxwRtlnwxo0bqVevXqm3naxIadSoUbRt25ZPP/2UadOm+ePT7Y9kTWaDB6cjjjii1LGFkaqiumbNmqEOjuVNCsme/fDNN9+knD/dSVqyaV6yTVchP3ny5JgiOO9zi0iZEoTXhX7U7I7mLPL+uUSEbbfdFnBaRmy//fYx8x199NHUqlXLv0JYt24d5557LjfffHPKtu9Bubo9PluSnRlHQUT8g1P82X5FdGeQTrL28u+99x4HHnggV111VUw9SbL94R10Lr300oSy7Hbt2kURcozHH3886fiaNWuGatkUvFLOpVRX2D169GD16tVp/w+6d+9OcXGx/7/jfQ8jR45MOMkIc69MtpqoWlLIIu+fokaNGn678OXLl/t3VnpuvfVWwKlIA2jTpg3PPvsst912G3Xr1k267lWrVvGPf/yDZs2a0bx5cy68MOHx2r6mTZsmvUmmMtxPAdlLesErhXifffZZqddXmp5UM93/ELxSCd41fvrpp/u93nq85rnZbPd+++23Jx0fNilkW6ouJdq0aZPy5r1GjRqlbCrradq0KfXq1WPAgAExVwfx/T6dc845pQs4SmEqHvLpVZkrmr1nI+y22276008/KaCff/65qqpu2bIlaQXVqlWrYoYPOuigmIqohg0b6v333590e7vuumvSiiyP91Aa7/XZZ58lVHRNmTKlVBV83sN8qsIrvrljeV833HBDqPn++c9/lntbwSaP3kOG2rVrl5X9tueee6acNnXq1JjmudXp1aNHj3It37Vr13Idf7CH7OSnxx9/XH/++eek07wvP53zzjvPn69+/fpp5w0+GEdVtU+fPgnrf/jhh/155syZ47/v1KmT/yMuzT/u3Llzc/7jy9fXXXfdlbVtBRPaggULYk46on6lSwpHH310zr+HyvwqD3Ld+sgk17dvX3baaafMM6YwYsQIJkyYwPjx4zM+dGXbbbflmmuu8esmRo8enXDp7tVtADRp0oS5c+cyZcoURo0aRffu3dl///3Zb7/9QsdXUlLCvffey2WXXRYz/s477/Tf169fP/T6SqtGjRr+nbP5pkGDBlnbVrD9/umnn16qO6/La/bs2SmnJesg0eSZMJkjn16V/UohHSrgbKC0fv75Z23evLkedthhKdtBr1ixQmfNmqVnn312wplL+/btVVV1jz32UEC/++47f7ngfME7f71nOUf1GjhwYM7P6JK9nn322Zxte+bMmTn//OA8+zjXMVTm159//lnm3zp2pVD57LnnngwZMiSr29xpp50oKirigw8+SNm0sUmTJuyzzz7+GX6yM16v36Edd4zv3srRqVMn/33wPoCK1rZt25SVw9nmNRjwZKvVVDI5uTM2CefYZMrqlFNOiX4jYTJHPr2q8pVCvisuLtbrr79eN2zY4N+x+sQTT6ScH/fsZvbs2aqqevnllyug9913nz/t448/Dn2WNHToUL399ttjxgXLqFu1aqVLly6NqXfJ1eucc85JKMd/7rnnchbP/vvvn/N9Yq/yv+67774y/36xKwVT0Ro3bsyQIUOoU6cO22+/Parq9zSajveUt2RNIuOf09CtW7eYG7PA6YXyscce49prr024ESzYRXaHDh1o1apV1po8Bp8REK+goAARiWma6d1lnAuleYSrKb0wv4OK0LFjx8i3YUnBRObkk0+Oeaav16Y73cG0cePGdO7cmWXLlvkV3CeeeCIXXXQRkFg81bRpU7/7ZnWLJspy41NZ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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "# Plot loss over time\n",
    "plt.plot(loss_vec, 'k-')\n",
    "plt.title('Cross Entropy Loss per Generation')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Cross Entropy Loss')\n",
    "plt.show()\n",
    "\n",
    "# Plot train and test accuracy\n",
    "plt.plot(train_acc, 'k-', label='Train Set Accuracy')\n",
    "plt.plot(test_acc, 'r--', label='Test Set Accuracy')\n",
    "plt.title('Train and Test Accuracy')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend(loc='lower right')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
